package persistencia;

import java.beans.XMLEncoder;
import java.beans.XMLDecoder;
import java.io.BufferedOutputStream;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import entidades.Gerenciador;

/**
 * Classe que gerencia a persistencia do sistema. 
 * @author ArthurBSH
 *
 */
public class Persistencia {

	static final String FILE_PATH = "gerenciador.xml";

	/**
	 * Grava num arquivo xml o gerenciador passado com parametro.
	 * @param gerenciador
	 * 		O gerenciador a ser gravado num arquivo
	 * @throws Exception
	 */
	public static void gravaGerenciador(Gerenciador gerenciador) throws Exception{
		XMLEncoder e = new XMLEncoder( new BufferedOutputStream( new FileOutputStream(FILE_PATH)));
		e.writeObject(gerenciador);
		e.close();
	} 

	/**
	 * Carrega e retorna um gerenciador que foi gravado no arquivo.
	 * @return
	 * 		O gerenciador que foi carregado do arquivo.
	 * @throws Exception
	 */
	public static Gerenciador carregaGerenciador() throws Exception{
		return carregaGerenciador(FILE_PATH);
	}

	/**
	 * Carrega e retorna um gerenciador que foi gravado no arquivo.
	 * @param filepath* @return
	 * 		O gerenciador que foi carregado do arquivo.
	 * @throws Exception
	 */
	public static Gerenciador carregaGerenciador(String filepath) throws Exception{
		XMLDecoder d = new XMLDecoder( new BufferedInputStream(new FileInputStream(FILE_PATH)));
		Gerenciador result = (Gerenciador) d.readObject(); 
		d.close();
		return result;
	}
	
	/**
	 * Checa se ja existe um Gerenciador salvo na memoria
	 * 
	 * @return true se existe um Gerenciador gravado na memoria
	 */
	public static boolean existeGerenciador() {
		File file = new File(FILE_PATH);
		return file.exists();
	}
	
	
	/**
	 * Apaga, se existir, o arquivo onde estaria gravado o Gerenciador
	 */
	public static void zerarSistema(){
		File file = new File(FILE_PATH);
		if(file.exists()){
			file.delete();
		}
	}

}
